package com.springboot.frame.starter.pay.v3.resp;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.Date;
import java.util.List;

/**
 * @author liheng
 * @ClassName FacilV3PayNotifyRespBody
 * @Description
 * @date 2021-09-02 11:11
 */
@Data
public class FacilNotifyV3PayDecodeRespBody {
    /**
     * 服务商应用ID
     */
    @JsonProperty("sp_appid")
    private String spAppid;
    /**
     * 服务商户号
     */
    @JsonProperty("sp_mchid")
    private String spMchid;
    /**
     * 子商户应用ID
     */
    @JsonProperty("sub_appid")
    private String subAppid;
    /**
     * 子商户号
     */
    @JsonProperty("sub_mchid")
    private String subMchid;
    /**
     * 商户订单号
     */
    @JsonProperty("out_trade_no")
    private String outTradeNo;
    /**
     * 交易状态描述
     */
    @JsonProperty("trade_state_desc")
    private String tradeStateDesc;
    /**
     * 交易类型，枚举值：
     * JSAPI：公众号支付
     * NATIVE：扫码支付
     * APP：APP支付
     * MICROPAY：付款码支付
     * MWEB：H5支付
     * FACEPAY：刷脸支付
     */
    @JsonProperty("trade_type")
    private String tradeType;
    /**
     * 附加数据，在查询API和支付通知中原样返回，可作为自定义参数使用
     */
    private String attach;
    /**
     * 微信支付订单号
     */
    @JsonProperty("transaction_id")
    private String transactionId;
    /**
     * 交易状态，枚举值：
     * SUCCESS：支付成功
     * REFUND：转入退款
     * NOTPAY：未支付
     * CLOSED：已关闭
     * REVOKED：已撤销（付款码支付）
     * USERPAYING：用户支付中（付款码支付）
     * PAYERROR：支付失败(其他原因，如银行返回失败)
     */
    @JsonProperty("trade_state")
    private String tradeState;
    /**
     * 银行类型，采用字符串类型的银行标识。银行标识请参考《银行类型对照表》
     * https://pay.weixin.qq.com/wiki/doc/apiv3_partner/terms_definition/chapter1_1_3.shtml#part-6
     */
    @JsonProperty("bank_type")
    private String bankType;
    /**
     * 支付完成时间，遵循rfc3339标准格式，格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE，
     * YYYY-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，
     * TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。
     * 例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日 13点29分35秒。
     * 示例值：2018-06-08T10:34:56+08:00
     */
    @JsonProperty("success_time")
    private Date successTime;
    /**
     * 订单金额信息
     */
    private Amount amount;
    /**
     * 优惠功能，享受优惠时返回该字段
     */
    @JsonProperty("promotion_detail")
    private List<PromotionDetail> promotionDetail;
    /**
     * 支付者信息
     */
    private Payer payer;
    @JsonProperty("scene_info")
    private SceneInfo sceneInfo;

    @Data
    public class Amount {
        @JsonProperty("payer_total")
        private int payerTotal;
        private int total;
        private String currency;
        @JsonProperty("payer_currency")
        private String payerCurrency;
    }

    @Data
    public class GoodsDetail {
        @JsonProperty("goods_remark")
        private String goodsRemark;
        private int quantity;
        @JsonProperty("discount_amount")
        private int discountAmount;
        @JsonProperty("goods_id")
        private String goodsId;
        @JsonProperty("unit_price")
        private int unitPrice;
    }

    @Data
    public class Payer {
        private String openid;
    }

    @Data
    public class PromotionDetail {
        private int amount;
        @JsonProperty("wechatpay_contribute")
        private int wechatpayContribute;
        @JsonProperty("coupon_id")
        private String couponId;
        private String scope;
        @JsonProperty("merchant_contribute")
        private int merchantContribute;
        private String name;
        @JsonProperty("other_contribute")
        private int otherContribute;
        private String currency;
        @JsonProperty("stock_id")
        private String stockId;
        @JsonProperty("goods_detail")
        private List<GoodsDetail> goodsDetail;
    }

    @Data
    public class SceneInfo {
        @JsonProperty("device_id")
        private String deviceId;
    }
}
